2019年9月13日

课程大纲

  • R语言的特征(跳过)
  • 工作界面与工作流程介绍
  • 演示:基础操作与数据分析流程
  • 使用github获得最新讲义
  • 学习资料介绍

R 语言的特征

什么是 R

  • R 语言是一种计算机高级语言,用于数据分析和绘图
  • 各种统计建模、作图;任意扩展
  • R 语言脱胎于 1980 年左右诞生的 S 语言
  • 作者是新西兰奥克兰大学统计系Ross Ihaka与Robert Gentleman
  • S语言是贝尔实验室统计研究部编制的一套完整的高级语言系统
  • 在1998年被美国计算机协会(ACM) 授予了“软件系统奖”
  • 1997 年 R 语言正式成为 GNU 项目,核心代码由R Core Team 维护
  • 2010年获得第一届“统计计算及图形奖”(美国统计协会)

R 语言的特点

  • 开源且扩展性强(各类前沿方法)
  • 面向对象的程序语言(面向过程的语言stata、spss)
  • 与其它软件的交互能力、可嵌入性强
  • 完整的工作流,实现可重复性(Reproducible)分析
  • 文档多元多样(需要适应)
  • 适用于多操作系统的轻量化平台
  • 比较流行排名

R 的整合能力

  • 数据:可连接数据库,如Oracle、MySQL
  • 运算:可调用C或Fortran函数进行底层运算;多核、并行计算;GPU计算
  • 应用:可作为运算引擎嵌入JAVA开发的系统中(Rserve)
  • 网络:R与web整合部署(Rook, shiny)

R 可以做什么?

  • 统计计算与绘图(学术界)
  • 数据爬取
  • 文本分析
  • 空间分析
  • 网络分析
  • R主体资源task views

R 语言学习路径特征

  • 学习曲线比较陡
  • 不用就忘了

R的使用流程与工具箱

工具组合

R与Rstudio的关系

R与R包的关系

R的界面

RStudio的界面

RStudio的界面介绍

RStudio的界面设定

R和Rstudio、Rmarkdown的进一步学习

演示时间
基础设定、安装包、
交互编程、创建文件、打开文件

安装

  • R的官方网站
  • RStudio
  • 扩展包的安装和加载
    • install.packages("tidyverse")
    • library(tidyverse)
    • if(!require(tidyverse)) install.packages("tidyverse")
  • 安装扩展包相当于将某个工具买回来了;加载相当于带在身上了。
    • 查看帮助 library(help="tidyverse")

一些默认设定

改变默认语言(建议设定为英文)

  • (win)修改R安装目录下etc\Rconsole文件,language = en
  • (linux)在用户主目录中增加文件.RenvironLANGUAGE=en
  • (Mac) 在终端中输入 defaults write org.R-project.R force.LANG en_US.UTF-8 即可

查询当前工作目录getwd() 改变默认工作目录 setwd("D:/work")

注意Mac与Windows电脑路径表达差异

演示时间
通过Rscript
进行数据分析与结果呈现

演示内容

  • 创建和保存R代码
  • 运行R代码中的命令的方式:ctrl+enter 或者点击run

打开文件为乱码的情况

通过菜单file->reopen with encoding,简体中文通常可尝试选择gb2312解决

演示时间
使用Rmarkdown
进行数据分析与结果呈现

创建Rmd文件:菜单操作

创建Rmd文件:设定输出文件格式

Rmd文件的结果

自动生成的模板文件已经设定了头部yaml

简单的文本和代码以及相关操作说明。

通过cmd+op+I插入代码。

R Markdown 简单语法

简单的标记语法(记得带空格)

  1. #表示一级标题;##二级标题 ###三级标题
  2. -号或+号或*号 表示列表
  3. 数字加英文句号 表示数字列表
  4. []加() 链接
  5. ![]加()插入图片
  6. 前后两个* 表示加粗
  7. 前后一个* 表示斜体
  8. > 表示引用
  9. 兼容html语法和CSS设定

技巧:可以将一个语法手册放在手边,随时参考 .

Rmd 代码块参数设置

设定 效果
include=FALSE 代码可以执行,报告(html、word)中不出现代码和结果,但是运行的结果存在workspace中,可以直接调用
echo = FALSE 执行代码,打印结果,但是不打印代码~即最终报告中出现的结果,没有代码
evalue = FALSE 不执行代码,仅呈现
message = FALSE 执行代码,打印代码,不打印结果
warning = FALSE 执行代码,不打印出warning的信息
fig.cap = "…" 输出图形结果时添加标题
fig.width / fig.height 设定输出图大小

Rmd文件的编译

编辑完成之后可以通过Rstudio上的Knit按钮进行转码打印

Rmarkdown示例
预期寿命与人均GDP关系

数据分析任务

呈现全球国家的预期寿命(life expectancy)和人均GDP(GDP per capita)之间的关系. Hans Rosling曾经做个一个TED演讲

第一步: 创建文件并加载必要的包(packages)

  • 下面将使用 dplyr包 (用于数据处理 data wrangling) 和 ggplot2 (用于作图,visualization) .

  • 首先要确保这些包都安装了(installed).

  • 在markdown中加载(Load)这些包:

library(dplyr)
library(ggplot2)
library(gapminder)
library(gganimate)

插入另一段描述

可以这样做

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
summary(Duncan)
##    type        income        education         prestige    
##  bc  :21   Min.   : 7.00   Min.   :  7.00   Min.   : 3.00  
##  prof:18   1st Qu.:21.00   1st Qu.: 26.00   1st Qu.:16.00  
##  wc  : 6   Median :42.00   Median : 45.00   Median :41.00  
##            Mean   :41.87   Mean   : 52.56   Mean   :47.69  
##            3rd Qu.:64.00   3rd Qu.: 84.00   3rd Qu.:81.00  
##            Max.   :81.00   Max.   :100.00   Max.   :97.00

第二步: 导入数据

# gapminder <- read.csv("https://stat.duke.edu/~mc301/data/gapminder.csv")
# setwd("/Users/liding/E/Bdata/liding17/2017R/lesson3/")
gapminder <- read.csv("../data/gapminder.csv")

第三步: 筛选数据

  • gapminder 数据集(dataset)开始

  • 选择年份(year)变量等于2007的案例

  • 将筛选出来的案例存到一个新的数据集gap07

gap07 <- gapminder %>%
  filter(year == 2007)

第四步: 探索和可视化(Explore and visualize)

任务: 呈现 gdpPercaplifeExp之间的关系.

qplot(x = gdpPercap, y = lifeExp, data = gap07)

第五步: 深入分析1

任务: 各个大陆的点使用不同的颜色.

qplot(x = gdpPercap, y = lifeExp, color = continent, data = gap07)

第五步: 深入分析2

任务: 在设定点的大小与人口规模成正比.

qplot(x = gdpPercap, y = lifeExp, color = continent, size = pop,data = gap07)

创建动态图

ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = continent)) +
  geom_point(alpha = 0.7, show.legend = FALSE) +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
  transition_time(year) +
  ease_aes('linear')

创建动态图

Github客户端的使用

注册和安装客户端

复制一个项目库到本地

登录之后

复制一个项目库到本地

复制一个项目库到本地

更新一个项目库

更新项目库可以得到最新的讲义,这个文件夹里的东西作为只读即可。 如果想在讲义资料中增加笔记,可将得到的讲义复制到别处在进行修改。 大家也可以创建自己的项目库,将自己更改后的讲义分享到github上。 未来作为项目成员与人合作完成项目时可用github进行版本控制和写作。

R入门方法与资料

学习 R 的方法

  • 适时做笔记,记下一些重点或技巧(在原文件中加入批注的形式)。
  • 学习时亲手键入代码,修改,理解其意义。
  • 坚持练习,尝试利用身边的数据进行应用分析。
  • 第一讲的课程指引中有很多资源链接

本课程侧重教tidyerse

为什么教tidyverse

  • 教学中会对照tidyverse与R基础语言,但以tidyverse为主,方便上手。
  • 现在已经由Rstudio维护:质量、一致性、可持续性、扩展性有保证!

为什么教tidyverse

功能主题 基础命令 tidyverse
字符处理 基础函数 stringr
绘图系统 plot ggplot2
代码风格 函数嵌套 管道函数(%>%
列表处理 list(自建循环) rlist
json处理 Rjson+RJSONIO jsonlite
数据抓取 RCurl+XML httr+xml2
循环任务 for/while——apply plyr::a_ply——并行运算(foreach、parallel)
切片索引 subset dplyr::select+filter
聚合运算 aggregate plyr::ddply+mutate——dplyr::group_by+summarize
数据联结 merge——plyr::join dplyr::left/right/inner/outer_join
数据塑型 plyr::melt/dcast tidyr::gather/spread

为什么教tidyverse

功能主题 基础命令 tidyverse
聚合运算 aggregate plyr::ddply+mutate——dplyr::group_by+summarize
数据联结 merge——plyr::join dplyr::left/right/inner/outer_join
数据塑型 plyr::melt/dcast tidyr::gather/spread

data.table 等高效包后面自学很快!

如何得到帮助

命令 功能
help.start() 打开帮助文档首页
help("foo")?foo 查看函数foo的帮助(引号可以省略)
help.search("foo")??foo 以foo为关键词搜索本地帮助文档
example("foo") 函数foo的使用示例(引号可以省略)
RSiteSearch("foo") 以foo为关键词搜索在线文档和邮件列表存档
apropos("foo", mode="function") 列出名称中含有foo的所有可用函
data() 列出当前已加载包中所含的所有可用示例数据集
vignette() 列出当前已安装包中所有可用的vignette文档
vignette("foo") 为主题foo显示指定的vignette文档